package com.itheima.d4_collection_set;

import java.util.HashSet;
import java.util.Set;

/**
 * HashSet集合默认不能对内容一样的两个不同对象去重复！
 *         比如内容一样的两个学生对象存入到HashSet集合中去 , HashSet集合是不能去重复的！
 *         因为两个对象只是内容相同，但是地址值不同，计算出来的哈希值也不同，那么计算出来的底层数组索引值也不同，那就会被hashset集合认为是不重复的
 * 目标：自定义的类型的对象，比如两个内容一样的学生对象，如何让HashSet集合能够去重复！
 * 结论：如果希望Set集合认为2个内容一样的对象是重复的，
 *      保证内容一样的对象计算出来的哈希值相同：重写对象的hashCode()
 *      计算出来的底层数组索引值相同后，保证调用equals方法判断的是新老元素的内容：重写equals()方法
 *
 *   疑惑：   自定义类型对象里面已经重写了compareTo的排序规则，为什么这里的输出结果没有排序
 */
public class SetTest3 {
    public static void main(String[] args) {
        Set<Student> students = new HashSet<>();
        Student s1 = new Student("至尊宝", 28, 169.6);
        Student s2 = new Student("蜘蛛精", 23, 169.6);
        Student s3 = new Student("蜘蛛精", 23, 169.6);
        System.out.println(s2.equals(s3));
        System.out.println(s2.hashCode());
        System.out.println(s3.hashCode());
        Student s4 = new Student("牛魔王", 48, 169.6);
        students.add(s1);
        students.add(s2);
        students.add(s3);
        students.add(s4);
        System.out.println(students);
        //为什么输出结果是下面的这个，没有排序
        //[Student{name='至尊宝', age=28, height=169.6}, Student{name='蜘蛛精', age=23, height=169.6}, Student{name='牛魔王', age=48, height=169.6}]
    }
}
